/**
 * 取真实绝对路径  软连接取最终指向路径
 * @param path string 绝对路径 或 相对工作路径
 * @param opt json|null 选项
 * 		enc: string 返回编码  utf8(默认)|buffer|base64
 * 		ign: boolean 不存在是否忽略异常 默认false:抛出
 * 		syn: boolean 是否同步操作  默认false:异步
 * @return Promise|string|buffer|null !opt.syn->Promise
 * 		string:enc=utf8时,绝对路径  null:不存在且ign
 */
$.fsReal = function(path, opt=null){
	const DEF = {enc:'utf8', ign:false, syn:false};
	const $FS=require('node:fs'), ERR=(e,o)=>{
		let x = e.code==='ENOENT' || e.code==='ENXIO';
		if(x&&o.ign) return null; $.err('$.fsReal',e);
	};
	$.fsReal = function(path, opt=null){
		opt=$.mix({},DEF,opt); let u=opt.enc==='utf8';
		const opx={encoding:opt.enc};  let v;
		if(opt.syn){
			try{ return $FS.realpathSync(path,opx); }
			catch(err){ return ERR(err, opt); }
		}
		return $.fsAsync('realpath', path, opx)
			.catch(err=>ERR(err,opt));
	};
	return $.fsReal(path, opt);
};
